package com.mybatis;

import com.mybatis.dao.MyCrudDao;
import com.mybatis.mapper.MyCrudInjector;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.session.Configuration;

public class MyConfiguration extends Configuration{
    private MyCrudInjector myCrudInjector;//不在这个时候初始化可能考虑到configuration里面参数还没有初始化完全

    @Override
    public <T> void addMapper(Class<T> type) {//由于没有xml文件所以此时这个方法是checkDaoConfig（）的
        //重写addmapper方法，让如果集成crud的类自动生成sql，然后为其每个方法addmappedstateent
        super.addMapper(type);
        if (MyCrudDao.class.isAssignableFrom(type))//我们的class如果继承了这个mycruddao的类,那addmappedS..
        {
            if (this.myCrudInjector==null)
            {
                myCrudInjector = new MyCrudInjector(this);//这边感觉两边互相依赖了，其实没有
                // ，因为injector里面不会在用到这个myCrudInjector，只是用到了configuration里面的其他map的属性
            }
            myCrudInjector.inject(type);
        }
    }

    @Override
    public void addMappedStatement(MappedStatement ms) {
        if (this.mappedStatements.containsKey(ms.getId()))
        {
            System.out.println("xml文件里面已经有了此接口，优先级更高，因为xml是定制的，所以接口的无效");
        }
        else
        {
            super.addMappedStatement(ms);
        }
    }
}
